1.1 Tipos de Datos

Antes de concentrarnos en los Tipos Abstractos de Datos, tenemos que saber qué es un Tipo de Dato. Para entender este concepto daremos varios ejemplos, estos serán examinados con el propósito de ir descrubriendo que características comunes e inferir un modelo intuitivo de Tipo de Dato que será formalizado más adelante mediante el concepto de Tipos de Dato Abstracto.

Tomaremos los ejemplos de dos fuentes: el lenguage C y la realidad cotidiana. En el lenguaje C tenemos varios Tipos de Datos, por ejemplo: int, float, cadena de caracteres y arreglo de número enteros. De la realidad cotidiana podemos hablar de los Tipos de Datos como por ejemplo: Perro y Automóvil.

¿Qué podemos decir, por ejemplo, del tipo int?. primero: que este tipo es un subconjunto de los números enteros que se utilizan en matemática, pues los enteros son infinitos, en cambio, los int aunque muchos, son finitos. Esto quiere decir, que no todos los números enteros están representados en el tipo int, resumiendo:


\begin{displaymath}
int\subset I\end{displaymath}

Donde: \( I \) representa al conjunto de los números enteros. Lo segundo que podemos decir es que: los elementos que pertenecen a este Tipo de Dato se pueden operar, esto es, se pueden hacer operaciones con estos número como por ejemplo:

\( 1+2 \)

\( 34-5 \)

\( 56*1 \) \( 5/6 \)

\( 6\%2 \)1.1

Esto quiere decir que el tipo int tiene las operaciones: +, -, *, / y %, o sea:

\begin{eqnarray*}
+: & int\times int & \rightarrow int\\
-: & int\times int & \...
...s int & \rightarrow int\\
\%: & int\times int & \rightarrow int
\end{eqnarray*}



Al igual que el tipo int el tipo float es un subconjunto, pero esta vez de los números reales. Esto es, no todos los números reales se pueden expresar como float, pero todos los elementos de float son números reales. En resumen:


\begin{displaymath}
float\subset R\end{displaymath}

Donde \( R \) representa al conjunto de los números reales.

Los float también se pueden operar:


\begin{displaymath}
3.4+5.6\end{displaymath}


\begin{displaymath}
4e5*3489e-3\end{displaymath}


\begin{displaymath}
-4.7e5/3.0\end{displaymath}

Las operaciones del tipo float son: +, -, * y /. Las primeras operaciones parecen ser las mismas que las cuatro primeras de los int, pero no, es muy distinto sumar dos números enteros a sumar dos números reales. Cuando una persona suma dos números enteros sigue el algoritmo esquematizado en la figura [*]

Figure: Ejemplo del algoritmo usado por los humanos para sumar dos números enteros
\resizebox*{!}{0.1\textheight}{\includegraphics{suma_humano.eps}}

, pero cuando se suman dos reales debe tenerse en cuenta la mantiza y el exponente del número, es decir, se utiliza un algoritmo distinto para la misma operación. Cuando se tiene este caso se dice que el operador está sobrecargado.

Resumiendo las operaciones de tipo float son:

\begin{eqnarray*}
+: & float\times float & \rightarrow float\\
-: & float\times...
... \rightarrow float\\
/: & float\times float & \rightarrow float
\end{eqnarray*}



El tipo Cadena de Caracteres es una secuencia de caracteres terminada por fin de cadena. Por ejemplo la cadena que se ve en la figura [*]

Figure: La Cadena de Caracteres ``Hola Mundo''
\resizebox*{1\textwidth}{!}{\includegraphics{hola_mundo.eps}}

es la implementación que hace C de las cadenas de caracteres. Cada caracter ocupa un espacio del arreglo de caracteres, pero el último tiene que estar ocupado por el fin de cadena, es decir el '\0'. Si este no está presente ya no es una cadena de caracteres si no un simple arreglo de caracteres. Tendríamos:


\begin{displaymath}
Cadena=\left\langle caracter_{0},caracter_{1},caracter_{2},\cdots ,caracter_{n-1},fincadena\right\rangle \end{displaymath}

donde para todos los \( caracter_{i}\in char \) y \( fincadena \) es el caracter '\0'.

Los operadores que tiene C para las cadenas son muchos, todas las funciones que comienzan por str, las de la libreria string.h, además de las operaciones de arreglos. Algunas de estas operaciones son: [ ], strcmp, strstr, strcat, strcpy, etc. Estas operaciones se pueden expresar de la siguiente forma:

\begin{eqnarray*}
: & Cadena\times int & \rightarrow char\\
strlen: & Cadena & ...
...
strtr: & Cadena\times Cadena & \rightarrow Cadena\\
& etc. &
\end{eqnarray*}



Un arreglo de enteros es como lo vemos en la figura [*]

Figure: Arreglo de enteros.
\resizebox*{!}{0.1\textheight}{\includegraphics{arreglo_enteros.eps}}

, éste se llama \( arr \) y tiene capacidad para seis enteros. Como se ve, las casillas se numeran desde cero y cada elemento ocupa una casilla. Un arreglo de enteros es una secuencia de números enteros, formalmente:


\begin{displaymath}
Arreglo=\left\langle elem_{0},elem_{1},elem_{2},\cdots ,elem_{n-1}\right\rangle \wedge \forall elem_{i},elem_{i}\in int\end{displaymath}

Sorprendentemente un arreglo de enteros tiene una única operación: la de selección. Si se quiere seleccionar el elemento tres del arreglo, se escriba así: arr[3]. Formalmente:

\begin{eqnarray*}[\: ]: & Arreglo\times int & \rightarrow int\\
&
\end{eqnarray*}



Ahora tomando los ejemplos de la realidad cotidiana, un perro es un animal perteneciente a la especie Canis Familiaris, matemáticamente:


\begin{displaymath}
Perro\in Animal\wedge Perro=CanisFamiliaris\end{displaymath}

Las operaciones del tipo Perro podrían ser: dar de comer, defecar, acariciar, jugar, ladrar, etc. Formalmente:

\begin{eqnarray*}
comer: & Perro\times Comida & \rightarrow Perro\\
defecar: & ...
...tarrow Perro\\
jugar: & Perro & \rightarrow Perro\\
& etc. &
\end{eqnarray*}



De otro lado, un automovil puede decirse que está constituido por un motor, un chasis, un área de pasajeros y una carrocería. Esta es una coleción de elementos distintos y no una secuencia como los arreglos de los ejemplos pasados, tiene que se una tupla:


\begin{displaymath}
Automo\acute{v}il\in Vehiculo\wedge Autom\acute{o}vil=\left( motor,chasis,\acute{a}reapasajeros,baul,carroceria\right) \end{displaymath}

Las operaciones que se pueden hacer con tipo Automovil son muchas, listamos algunas: prender, apagar, acelerar, frenar, cambiar dirección, etc.

\begin{eqnarray*}
prender: & Automovil\times Llave & \rightarrow Automovil\\
ap...
...il\times Direcci\acute{o}n & \rightarrow Automovil\\
& etc. &
\end{eqnarray*}



¿Qué hay de común en los ejemplos anteriores?. Hay dos elementos que se repiten a lo largo de los ejemplos: las proposiciónes lógicas y los conjuntos de operaciones. Las proposiciones lógicas expresan qué elementos pertenecen o no al tipo, por ejemplo: la de tipo Automovil, indica que solo los vehiculos que tengan motor, chasis, área pasajeros, baúl y carrocería pueden ser calificados como tales. La del tipo Perro dice que solo los animales que sean cannis familiares pertenecería a este tipo, por ejemplo un lobo no perteneceria1.2. La del tipo Cadena dice que solo las secuencias de caracteres que terminen en fin de cadena son cadenas.

Las operaciones son el conjunto de acciones que se pueden hacer sobre un tipo, como por ejemplo: acariciar a un perro, prender un automovil, seleccionar un elemento de un arreglo, sumar dos enteros o restar dos flotantes.

Resumiendo, un tipo de datos define el conjunto de valores válidos del tipo y las operaciones que se pueden aplicar al tipo.



Footnotes

...\( 6\%2 \)1.1
La operación % es el residuo de la división. Por ejemplo \( 6\%2=0 \) ó \( 13\%4=1 \).
... perteneceria1.2
Sin embargo investigaciones basadas en el estudio comparativo del DNA de las dos especies han concluido que no son tales, que son una única especie. Los perros son realmente lobos.

next up previous contents
Next: 1.2 Modelo Up: 1. El Tipo de Previous: Precondiciones   Contents
Free Web Hosting